package savet.entidades.atributos;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 *
 * @author Rafael
 */
@Entity
@Table
@Inheritance(strategy = InheritanceType.JOINED)
public class Atributo implements Serializable {

    public static final long serialVersionUID = 2L;

    public static final int NAO_NOTIFICADO = 0;
    public static final int NOTIFICADO = 1;
    public static final int COM_AUTUACAO = 2;
    public static final int COM_ORIENTACAO = 3;
    public static final int COM_AUTUACAO_ORIENTACAO = 4;
    /** Quando o atributo pode ser visualizado. */
    public static final int NAO_OBRIGATORIO = 5;
    /** Quando o atributo nao tem a necessidade de ser visualizado. */
    public static final int NAO_SE_APLICA = 6;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private int estado;
    @OneToMany
    private List<Legenda> legendas = new ArrayList<Legenda>();

    /**
     * Seta o estado padrao para do atributo como {@link #NAO_NOTIFICADO}.
     */
    public Atributo() {
        this(NAO_NOTIFICADO);
    }

    /**
     * Estado do atributo. Deve assumir um dos valores constantes definidos em
     * {@link Atributo} como por exemplo {@link Atributo#HABILITADO}
     * <br/>
     *
     * @param estado
     */
    public Atributo(int estado) {
        this.estado = estado;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public List<Legenda> getLegendas() {
        return legendas;
    }

    public void setLegendas(List<Legenda> legendas) {
        this.legendas = legendas;
    }

    public int getEstado() {
        return estado;
    }

    public void setEstado(int estado) {
        this.estado = estado;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Atributo other = (Atributo) obj;
        if (this.estado != other.estado) {
            return false;
        }
        if (this.legendas != other.legendas && (this.legendas == null || !this.legendas.equals(other.legendas))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 79 * hash + this.estado;
        hash = 79 * hash + (this.legendas != null ? this.legendas.hashCode() : 0);
        return hash;
    }
    
}
